package gob.pe.mtpe.struts.action;
import gob.pe.mtpe.bean.ListaBean;
import gob.pe.mtpe.ibatis.despachadores.AjaxDespatch;
import gob.pe.mtpe.ibatis.despachadores.ReportePolizaDespatch;
import gob.pe.mtpe.struts.form.LoginForm;
import gob.pe.mtpe.struts.form.ReportePolizaForm;
import gob.pe.mtpe.util.funciones.Funciones;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;


public class ReportePolizaAction extends DispatchAction{
     private static Logger depurador = Logger.getLogger(ReportePolizaAction.class.getName());
     private Funciones funciones;



     public ActionForward inicio(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
         request.getSession().removeAttribute("l_tipdoc");
         request.getSession().removeAttribute("l_tipmoneda");
         request.getSession().removeAttribute("lstEmpAse");
         request.getSession().removeAttribute("lstPolizaTrabajador");
         request.getSession().removeAttribute("l_compaseg");
         request.getSession().removeAttribute("l_vinfam");
         request.getSession().removeAttribute("PS_CORRPOL");
         LoginForm logForm = (LoginForm)request.getSession().getAttribute("SUSUARIO");
         ReportePolizaForm reporteForm = (ReportePolizaForm)form;
         if(logForm==null) 
        	 return mapping.findForward("sessionnull");
    try{

            AjaxDespatch ajaxDespach= new AjaxDespatch();
         depurador.info("INGRESO INICIO REPORTE ");
         request.getSession().setAttribute("l_compaseg", ajaxDespach.obtCompAseguradora(logForm.getV_ruc()));
           return mapping.findForward("inicio");
        } catch (Exception e) {
           funciones=new Funciones();
           depurador.log(Level.ERROR," ERROR  EN INICIO REPORTE "+funciones.readStackTrace(e));
           return mapping.findForward("ErrorFatal");
       }
   }

     public ActionForward comprobante(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
             LoginForm logForm = (LoginForm)request.getSession().getAttribute("SUSUARIO");
             if(logForm==null) 
            	 return mapping.findForward("sessionnull");
             try {
                 Funciones funciones = new Funciones();
                 Map parameters = new HashMap();
                 ListaBean listaBean = new ListaBean();
                 List lista = null;
                 String reporte = "";
                 String codemp=logForm.getV_ruc();
                 String codsuc=logForm.getV_cod_Sucu();
                 String corpol=request.getParameter("corpoliza");
                 listaBean.setV_codemp(codemp);
                 listaBean.setN_codsuc(codsuc);
                 listaBean.setN_corrpol(corpol);

                 String p_reporte = "";
                 ServletContext servletContext = servlet.getServletConfig().getServletContext();
                 parameters.put("PV_RUTA_IMAGEN",servletContext.getRealPath("/util/images/imagenes/logo_mtpe.jpg")) ;
                 parameters.put("PV_V_CODEMP", codemp);
                 parameters.put("PV_N_CODSUC",codsuc);
                 parameters.put("PV_N_CORRPOL",corpol);

                 ReportePolizaDespatch reportesDespatch = new ReportePolizaDespatch();
                 reporte=Funciones.ObtieneProperty("mtpe.util.properties.mtpe_reportes","010");
                 lista =  reportesDespatch.comprobante(listaBean);
                 mostrarReporte(parameters,reporte,lista,response);
             } catch (Exception e) {
                funciones=new Funciones();
                depurador.log(Level.ERROR,funciones.readStackTrace(e));
                return mapping.findForward("ErrorFatal");
             }
             return null;
     }


     public ActionForward reimprimir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
         LoginForm logForm = (LoginForm)request.getSession().getAttribute("SUSUARIO");
         if(logForm==null) 
        	 return mapping.findForward("sessionnull");
         try {
        	 depurador.info("REIMPRIMIR");
             Funciones funciones = new Funciones();
             Map parameters = new HashMap();
             ListaBean listaBean = new ListaBean();
             List lista = null;
             String reporte = "";
             String codemp=logForm.getV_ruc();
             String codsuc=logForm.getV_cod_Sucu();
             String numenvio=request.getParameter("numenvio");
             String anoenvio=request.getParameter("anoenvio");
             depurador.info("numenvio---"+numenvio);
             depurador.info("anoenvio----"+anoenvio);
             listaBean.setV_codemp(codemp);
             listaBean.setN_codsuc(codsuc);
             listaBean.setN_numenv(numenvio);
             listaBean.setV_anoenv(anoenvio);

             String p_reporte = "";

             ServletContext servletContext = servlet.getServletConfig().getServletContext();
              parameters.put("PV_RUTA_IMAGEN",servletContext.getRealPath("/util/images/imagenes/logo_mtpe.jpg")) ;
             parameters.put("PV_V_CODEMP", codemp);
             parameters.put("PV_N_CODSUC",codsuc);
             parameters.put("PV_N_NUMENV",numenvio);
             parameters.put("PV_V_ANOENV",anoenvio);

             ReportePolizaDespatch reportesDespatch = new ReportePolizaDespatch();
             reporte=Funciones.ObtieneProperty("mtpe.util.properties.mtpe_reportes","011");
             depurador.info("ruta reporte---->"+reporte);
             lista =  reportesDespatch.reimprimir(listaBean);
             mostrarReporte(parameters,reporte,lista,response);
         } catch (Exception e) {
            funciones=new Funciones();
            depurador.log(Level.ERROR,funciones.readStackTrace(e));
            return mapping.findForward("ErrorFatal");
         }
         return null;
 }

     public ActionForward detalle(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
    	 depurador.info("detalle---");
    	 LoginForm logForm = (LoginForm)request.getSession().getAttribute("SUSUARIO");
    	  if(logForm==null) 
    		  return mapping.findForward("sessionnull");
         try {
             Funciones funciones = new Funciones();
             Map parameters = new HashMap();
             ListaBean listaBean = new ListaBean();
             List lista = null;
             String reporte = "";
             String codemp=logForm.getV_ruc();
             String codsuc=logForm.getV_cod_Sucu();
             String numenvio=request.getParameter("numenvio");
             String anoenvio=request.getParameter("anoenvio");
             String rucase=request.getParameter("rucase");

             depurador.info("rucase---"+rucase);
             depurador.info("numenvio---"+numenvio);
             depurador.info("anoenvio----"+anoenvio);
             listaBean.setV_codemp(codemp);
             listaBean.setN_codsuc(codsuc);
             listaBean.setV_codempase(rucase);
             listaBean.setN_numenv(numenvio);
             listaBean.setV_anoenv(anoenvio);

             String p_reporte = "";

             ServletContext servletContext = servlet.getServletConfig().getServletContext();
              parameters.put("PV_RUTA_IMAGEN",servletContext.getRealPath("/util/images/imagenes/logo_mtpe.jpg")) ;
             parameters.put("PV_V_CODEMP", codemp);
             parameters.put("PV_N_CODSUC",codsuc);
             parameters.put("PV_V_CODEMPASE",rucase);
             parameters.put("PV_N_NUMENV",numenvio);
             parameters.put("PV_V_ANOENV",anoenvio);

             ReportePolizaDespatch reportesDespatch = new ReportePolizaDespatch();
             reporte=Funciones.ObtieneProperty("mtpe.util.properties.mtpe_reportes","012");
             lista =  reportesDespatch.detalle(listaBean);
             mostrarReporte(parameters,reporte,lista,response);
         } catch (Exception e) {
            funciones=new Funciones();
            depurador.log(Level.ERROR,funciones.readStackTrace(e));
            return mapping.findForward("ErrorFatal");
         }
         return null;
 }
     
     public ActionForward verTrabajadores(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
         LoginForm logForm = (LoginForm)request.getSession().getAttribute("SUSUARIO");
         if(logForm==null) 
        	 return mapping.findForward("sessionnull");
         try {
             Funciones funciones = new Funciones();
             Map parameters = new HashMap();
             ListaBean listaBean = new ListaBean();
             List lista = null;
             String reporte = "";
             String codemp=logForm.getV_ruc();
             String codsuc=logForm.getV_cod_Sucu();
             String corpol=request.getParameter("corpoliza");
             listaBean.setV_codemp(codemp);
             listaBean.setN_codsuc(codsuc);
             listaBean.setN_corrpol(corpol);

             String p_reporte = "";
             ServletContext servletContext = servlet.getServletConfig().getServletContext();
             parameters.put("PV_RUTA_IMAGEN",servletContext.getRealPath("/util/images/imagenes/logo_mtpe.jpg")) ;
             parameters.put("PV_V_CODEMP", codemp);
             parameters.put("PV_N_CODSUC",codsuc);
             parameters.put("PV_N_CORRPOL",corpol);

             ReportePolizaDespatch reportesDespatch = new ReportePolizaDespatch();
             reporte=Funciones.ObtieneProperty("mtpe.util.properties.mtpe_reportes","013");
             lista =  reportesDespatch.trabajador(listaBean);
             mostrarReporte(parameters,reporte,lista,response);
         } catch (Exception e) {
            funciones=new Funciones();
            depurador.log(Level.ERROR,funciones.readStackTrace(e));
            return mapping.findForward("ErrorFatal");
         }
         return null;
 }




     void mostrarReporte(Map parameters,String reporte,List lista,HttpServletResponse response) throws  JRException{
    	 depurador.info("mostrarReporte==>");
    	 byte[] bytes=null;
          System.out.println(" 1 ======>"+reporte);
          ServletContext servletContext = servlet.getServletConfig().getServletContext();
          System.out.println(" 2 ======>");
          //JasperDesign jasperDesign = JRXmlLoader.load(servletContext.getRealPath("/jspDocs/reportes/rpt_reimprimir.jrxml"));
          JasperDesign jasperDesign = JRXmlLoader.load(servletContext.getRealPath("/jspDocs/reportes/"+reporte));
          System.out.println(" 3 ======>");
          JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
          System.out.println(" 4 ======>");
          bytes = JasperRunManager.runReportToPdf(jasperReport,parameters, new JRBeanCollectionDataSource(lista));
           try {
               if(bytes != null && bytes.length > 0){
                     response.setContentType("application/pdf");
                     response.setContentLength(bytes.length);
                     ServletOutputStream ouputStream = response.getOutputStream();
                     ouputStream.write(bytes, 0, bytes.length );
                     ouputStream.flush();
                     ouputStream.close();
             }
          } catch (Exception e) {
              funciones=new Funciones();
              depurador.log(Level.ERROR,funciones.readStackTrace(e));
          }

   }


}


